import java.util.*;

public class Main20250329 {
}
class Solution {
    Set<Integer> hasSeek = new HashSet<>();

    public int longestCycle(int[] edges) {
        //深度优先搜索
        //从第一个节点开始
        int max = 0;
        for (int i = 0; i < edges.length; i++) {
            if (!hasSeek.contains(i) && edges[i] != -1) {
                Map<Integer, Integer> map = new HashMap<>();
                map.put(i, 1);
                max = Math.max(max, deep(i, edges, map));
            }
        }
        return max == 0 ? -1 : max;
    }

    public int deep(int i, int[] edges, Map<Integer, Integer> map) {
        hasSeek.add(i);

        //本次指向在循环中 那就结束
        if (map.containsKey(edges[i])) {
            return map.get(i) - map.get(edges[i]) + 1;
        }

        //本次是-1，或者指向的是已经成环的节点 或者 不可能成环的节点 则直接结束 =》要么一定成环，要么一定不可能成环，所以遍历过的节点都不需要在选择了
        if (edges[i] == -1 || hasSeek.contains(edges[i])) {
            return 0;
        }

        //不在本循环中，那就继续往下走
        map.put(edges[i], map.get(i) + 1);
        int x = deep(edges[i], edges, map);
        return x == 0 ? 0 : x;
    }

}